﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.ComponentModel;
using System.Windows.Forms;

using Asol.Reporting.Editor.Components;
using Asol.Reporting.Editor.ComponentsLayer;
using Asol.Reporting.Editor.Editor;

namespace Asol.Reporting.Editor.Data
{
	#region class ReportItem : Bázová třída pro vizuální položky v editoru sestavy.
	/// <summary>
	/// ReportItem : Bázová třída pro vizuální položky v editoru sestavy.
	/// Potomkové jsou ReportComponent (textbox, label, atd), a ReportBand (vykresluje záhlaví svazku).
	/// Nejde o grafický objekt odvozený z Control, ale o datový objekt doplněný o metody pro vykreslování.
	/// Tento objekt obsahuje víceméně popisné property určující vzhled a umístění položky na sestavě a chování v editoru.
	/// Tato bázová třída řeší fyzickou podporu kreslení a interaktivity, ale konkrétní definice jsou implementovány na konkrétním potomkovi.
	/// </summary>
	public class ReportItem : EditorItem
	{
		#region Konstrukce a proměnné
        /// <summary>
        /// Bázová třída pro vizuální položky v editoru sestavy. Konstruktor.
        /// </summary>
		public ReportItem()
		{
			this.InteractivityMode = EditItemInteractivityMode.StandardActiveResize;
		}
		#endregion
	}
	#endregion
	#region class ItemId : Klíč libovolné položky do Reverteru: obsahuje numerické ID a typ položky.
	/// <summary>
	/// ItemId : Klíč libovolné položky do Reverteru: obsahuje numerické ID a typ položky.
	/// </summary>
	public class ItemId : IComparable
	{
		/// <summary>
		/// ItemId : Klíč libovolné položky do Reverteru: obsahuje numerické ID a typ položky.
		/// Konstruktor
		/// </summary>
		/// <param name="type"></param>
		/// <param name="id"></param>
		public ItemId(ItemType type, int id)
		{
			this.Type = type;
			this.Id = id;
		}
		/// <summary>
		/// Vizualizace
		/// </summary>
		/// <returns></returns>
		public override string ToString()
		{
			return this.Type.ToString() + " " + this.Id.ToString();
		}
		/// <summary>
		/// Druh záznamu
		/// </summary>
		public ItemType Type { get; private set; }
		/// <summary>
		/// ID záznamu
		/// </summary>
		public int Id { get; private set; }
		#region IComparable Members
		/// <summary>
		/// Komparátor
		/// </summary>
		/// <param name="obj"></param>
		/// <returns></returns>
		int IComparable.CompareTo(object obj)
		{
			ItemId other = obj as ItemId;
			if (obj == null) return 1;
			int cmp = ((int)this.Type).CompareTo((int)other.Type);
			if (cmp != 0) return cmp;
			return this.Id.CompareTo(other.Id);
		}
		#endregion
	}
	/// <summary>
	/// Druh položky, lze přidávat další
	/// </summary>
	public enum ItemType
	{
		/// <summary>Neurčeno</summary>
		None=0,
		/// <summary>Plocha = zahrnuje OriginPoint, Zoom, Scrollbars</summary>
		Sheet,
		/// <summary>Grid = nastavení mřížky</summary>
		Grid,
		/// <summary>Band = záhlaví svazku</summary>
		Band,
		/// <summary>Komponenta</summary>
		Component
	}
	#endregion
}
